home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / scbench.arc / TEXT.C < prev    next >
Text File  |  1980-01-01  |  3KB  |  136 lines

  1. /*
  2. ** BYTE Text Display Benchmark
  3. ** Version 1 for 8088/8086/80286/80386
  4. ** March 1988
  5. ** Written in BYTE Small-C
  6. ** Based on Small-C by J.E. Hendrix
  7. **
  8. ** This program executes the following steps:
  9. **  1. Saves the current video mode
  10. **  2. Prompts the user for which text mode he wishes to
  11. **     run the benchmark.
  12. **  3. Calculates the screen width for the mode the user has
  13. **     selected and constructs a string of the appropriate width.
  14. **  4. Begins timing.
  15. **  5. Switches to the new mode.
  16. **  6. Writes COUNT strings to the screen.
  17. **  7. Stops timing.
  18. **  8. Switches to the original video mode.
  19. **  9. Reports its results.
  20. ** 10. Exits.
  21. **
  22. ** This program writes to the screen using Small-C's
  23. ** Umsdos call directed to stdout. (Int 21h function 40H)
  24. */
  25.  
  26. /*
  27. ** Note: COUNT should have 40 and 80 as common denominator.
  28. */
  29.  
  30. #define COUNT 8000    /* Number of chars */
  31.  
  32. #define stdin 0        /* Standard input */
  33. #define stdout 1    /* Standard output */
  34. #define WRITE 16384    /* MSDOS write function */
  35.  
  36. int tblock[4];    /* Timer block */
  37. int vblock[3]; /* Array for video mode stuff */
  38. char buffer[82];  /* Char array for string */
  39. int lines;    /* Number of lines */
  40.  
  41. extern gtime();        /* Start stopwatch */
  42. extern calctim();    /* Stop stopwatch */
  43. extern gvmode();    /* Get video mode */
  44. extern svmode();    /* Set video mode */
  45.  
  46. main() {
  47.     int mode;    /* video mode */
  48.     int len;    /* string length */
  49.     int i;        /* For loop */
  50.     int row,col,rowinc,colinc;  /* Row and column vars */
  51.     char c;        /* Temporary holding char */
  52.     
  53. /* First get current video mode */
  54.     gvmode(vblock);
  55.  
  56. /* Now prompt for mode to test */
  57.     printf(" BYTE Text Video Benchmark\n");
  58.     printf(" What video mode?");
  59.     fscanf(stdin,"%d",&mode);
  60.  
  61. /* Select length */
  62.     switch(mode) {
  63.         case 0:
  64.         case 1: len=40;
  65.                  break;
  66.         case 2:
  67.         case 3:
  68.         case 7: len=80;
  69.                 break;
  70.         default:
  71.            printf("Illegal mode\n");
  72.            exit(0);
  73.     }
  74.  
  75. /* Build string */
  76.     c='A';
  77.     for (i=0;i<len;++i) {
  78.         buffer[i]=c++;
  79.         if(c>'Z') c='A';
  80.     }
  81.  
  82. /* Set # of lines to print */
  83.     lines = COUNT / len;
  84.  
  85. /* Initialize row/col outside of timing loop */
  86.     row = col = 1;
  87.     rowinc=1; colinc=1;
  88.  
  89. /* Begin timing */
  90.     gtime(tblock);
  91. /* Switch modes */
  92.     svmode(mode);
  93. /* Do the loop for writing stuff */
  94.     for (i=0; i<lines; ++i)
  95.         Umsdos(buffer,len,stdout,WRITE);
  96. /* Do cursor positioning loop */
  97.     for (i=0; i<COUNT; ++i)
  98.     {
  99.         curpos(row,col);
  100.         Umsdos(&c,1,stdout,WRITE);
  101.         if(row==25) rowinc=-1;
  102.         if(row==0) rowinc=1;
  103.         if(col==len) colinc=-1;
  104.         if(col==0) colinc=1;
  105.         row+=rowinc;
  106.         col+=colinc;
  107.         if(++c>'Z') c='A';
  108.     }
  109. /* Stop timing */
  110.     calctim(tblock);
  111. /* Switch mode back */
  112.     mode=vblock[0];
  113.     svmode(mode);
  114. /* Display results */
  115.     printf(" Elapsed time (HH:MM:SS:1/100ths):\n");
  116.     printf(" %d:%d:%d:%d\n",tblock[0],tblock[1],tblock[2],
  117.         tblock[3]);
  118.     exit(0);
  119. }
  120.  
  121. /*
  122. ** curpos(row,col) int row,col;
  123. ** position cursor to row/col using BIOS int 10h function
  124. */
  125. curpos(row,col) int row,col;
  126. {
  127. #asm
  128.     MOV    BP,SP
  129.     MOV    DL,2[BP]    ;column
  130.     MOV    DH,4[BP]    ;row
  131.     MOV    AH,2        ;Function
  132.     INT    10H
  133.     XOR    CX,CX
  134. #endasm
  135. }
  136.